package com.dragon.refect.bytecode;

/**
 * 方法的静态分派：
 * GrandPa grandPa1 = new Father();
 *
 * 以上代码，grandPa1的静态类型是GrandPa，而g1的实际类型(真正指向的类型)是Father.
 * 我们可以得到出这样的一个结论：变量的静态类型是不会发生变化的，而变量的实际类型则是可以发生变化的(多态的一种体现)，实际类型是在运行期方可确定的。
 *
 * @author dragon
 * @since 2019/12/9
 */
public class MyTest4 {
    // 方法重载，是一种静态的行为，编译期就可以完全确定的

    public void test(GrandPa grandPa) {
        System.out.println("grandPa");
    }

    public void test(Father fah) {
        System.out.println("father");
    }

    public void test(Son son) {
        System.out.println("son");
    }

    public static void main(String[] args) {
        MyTest4 myTest4 = new MyTest4();
        GrandPa grandPa1 = new Father();
        GrandPa grandPa2 = new Son();
        myTest4.test(grandPa1);
        myTest4.test(grandPa2);
    }
}


class GrandPa {
}

class Father extends GrandPa {

}

class Son extends Father {
}


